package com.steve.xfood.dto;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.steve.xfood.dataobject.OrderDetail;
import com.steve.xfood.enums.OrderStatusEnum;
import com.steve.xfood.enums.PayStatusEnum;
import com.steve.xfood.util.EnumUtil;
import com.steve.xfood.util.serializer.Date2LongSerializer;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author steve
 * @date 2020/5/8 6:32 上午
 */
@Data
//@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
//@JsonInclude(JsonInclude.Include.NON_NULL) //null的数据不返回
public class OrderDTO {

    /** 订单id. */
    private String orderId;

    /** 买家名字 */
    private String buyerName;

    /** 买家电话 */
    private String buyerPhone;

    /** 买家地址 */
    private String buyerAddress;

    /** 买家微信openid */
    private String buyerOpenid;

    /** 订单总金额 */
    private BigDecimal orderAmount;

    /** 订单状态, 默认0新订单 */
    private Integer orderStatus;

    /** 支付状态，默认0未支付 */
    private Integer payStatus;

    /** 创建时间 */
    @JsonSerialize(using = Date2LongSerializer.class) //通过使用工具类把Date类型转换为Long类型
    private Date createTime;

    /** 更新时间 */
    @JsonSerialize(using = Date2LongSerializer.class) //通过使用工具类把Date类型转换为Long类型
    private Date updateTime;

    /** 订单详情集合 */
    // private List<OrderDetail> orderDetailList = new ArrayList<>(); 加上默认值空字符串
    private List<OrderDetail> orderDetailList;

    /** 根据orderStatus获取对应的枚举值, 返回的OrderDTO对象不需要返回这个字段，因此使用@JsonIgnore需要忽略掉 */
    @JsonIgnore
    public OrderStatusEnum getOrderStatusEnum() {
        return EnumUtil.getByCode(orderStatus, OrderStatusEnum.class);
    }

    /** 根据payStatus获取对应的枚举值, 返回的OrderDTO对象不需要返回这个字段，因此使用@JsonIgnore需要忽略掉*/
    @JsonIgnore
    public PayStatusEnum getPayStatusEnum() {
        return EnumUtil.getByCode(payStatus, PayStatusEnum.class);
    }
}
